package com.zz.common.codeGenerator.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zz.common.base.dto.PageListResultDto;
import com.zz.common.base.param.QueryParam;
import com.zz.common.codeGenerator.dto.GenTableColumnDto;
import com.zz.common.codeGenerator.entity.GenTableColumn;

import java.util.List;

/**
 * 代码生成业务表字段 服务接口
 *
 * @author zhang.lei
 * @since 2025-08-18 20:32:36
 */
public interface GenTableColumnService extends IService<GenTableColumn> {

    /**
     * 分页查询
     *
     * @param genTableColumnDto 查询参数
     * @return PageListResultDto<GenTableColumnDto>
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    PageListResultDto<GenTableColumnDto> queryWithPage(GenTableColumnDto genTableColumnDto, QueryParam queryParam);

    /**
     * 分页查询
     *
     * @param genTableColumnDto 查询参数
     * @return List<GenTableColumnDto>
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableColumnDto> queryWithNoPage(GenTableColumnDto genTableColumnDto);

    /**
     * 根据id查询
     *
     * @param id 主键
     * @return GenTableColumnDto
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableColumnDto queryById(String id);

    /**
     * 根据主键查询单表数据
     *
     * @param id 主键
     * @return List<GenTableColumnDto>
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableColumnDto> queryByIds(List<String> id);

    /**
     * 保存
     *
     * @param genTableColumnDto 对象
     * @return GenTableColumnDto
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableColumnDto save(GenTableColumnDto genTableColumnDto);

    /**
     * 批量保存
     *
     * @param genTableColumnDtos 对象
     * @return List<GenTableColumnDto>
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableColumnDto> saveBatch(List<GenTableColumnDto> genTableColumnDtos);

    /**
     * 修改
     *
     * @param genTableColumnDto 对象
     * @return GenTableColumnDto
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableColumnDto modify(GenTableColumnDto genTableColumnDto);

    /**
     * 批量修改
     *
     * @param genTableColumnDtos 对象
     * @return List<GenTableColumnDto>
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<GenTableColumnDto> modifyBatch(List<GenTableColumnDto> genTableColumnDtos);

    /**
     * 删除
     *
     * @param id 主键
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    void delete(String id);

    /**
     * 删除
     *
     * @param ids 主键
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    void deleteBatch(List<String> ids);

    /**
     * 插入
     *
     * @param genTableColumnDto 对象
     * @return GenTableColumnDto
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableColumnDto insert(GenTableColumnDto genTableColumnDto);

    /**
     * 指定主键插入
     *
     * @param genTableColumnDto 对象
     * @return GenTableColumnDto
     * @create: 2025-08-18 20:32:36
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    GenTableColumnDto insertWithId(GenTableColumnDto genTableColumnDto);


    List<GenTableColumn> selectDbTableColumnsByName(String tableName);

    List<GenTableColumnDto> queryByTableId(String tableId);

    void batchTrueDeleteByTableIds(List<String> collect);

    void markFkInSubTable(String tableId, String subTableFkName);
}
